<script>
  // 工厂方法
  // 简单工厂，不是标准23种模式之一，你可以理解成是工厂方法中的一种特例，所以俗称“静态工厂方法”
</script>

<script>
  var Mac = function(opt) { /*对象的创建过程*/ }
  var Win = function(opt) { /*对象的创建过程*/ }

  // 简单工厂：不关注对象的创建过程
  var SimpleFactory = function(type, opt) {
    this.type = type
    switch (type) {
      case 'mac':
        return new Mac(opt)
      case 'win':
        return new Win(opt)
      default:
        throw new Error('我们没有这种产品')
    }
  }

  var mac = new SimpleFactory('mac')
  var win = new SimpleFactory('win')
</script>

<script>
  // 工厂方法：要关注对象的创建过程
  var FactoryMethod = function(type) {
    console.log('this type', this[type])
    if (typeof this[type] === 'function') {
      return new this[type]()
    } else {
      throw new Error('工厂无法生产这种产品')
    }
  }
  FactoryMethod.prototype = {
    // 对象的创建过程，也需要自己封装
    // 这相当于是工厂自己的生产流水线
    Mac: function(opt) {  },
    Win: function(opt) {}
  }

  var mac1 = new FactoryMethod('Mac')
  var win1 = new FactoryMethod('Win')
</script>
